// array test
(function () {
    const arr = [1, 2, 3, 4, 5, 6];
    let count = 0;
    arr.forEach((n) => {
        count++;
        if (n === 2) {
            arr.push(7);
        }
        console.log("arr.length: %s, count: %s", arr.length, count);
    });
})();

/* splitWords
有字符串 str = 'xxx xxx xxx xx xxxxxx'
给定长度 num = 10
生成数组：
['xxx xxx',
'xxx xx',
'xxxxxx']
*/
(function () {
    const str = "xxx xxx xxx xx xxxxxx x xxx x";
    const num = 10;

    function splitMaxLengthWords(str: string, num: number) {
        const arr = str.split(" ");
        const ret = [];
        const stack = [];

        for (let i = 0; i < arr.length; i++) {
            // 当前临时栈内的总字符长度
            const savedLength = stack.join(" ").length;
            /* 若当前字符 + 临时栈内的总字符长度 >= 指定数字，表示临时栈的内容已是最大有效长度的单词了
                则将临时栈内的单词放到ret中，并清空当前栈
                同时，将当前字符推入栈内；不然则直接将当前单词推入栈内
            */
            if (savedLength + arr[i].length >= num) {
                let target = stack.join(" ");
                stack.length = 0;
                // target可能为空
                if (target) {
                    ret.push(target);
                }
                stack.push(arr[i]);
            } else {
                stack.push(arr[i]);
            }
        }

        if (stack.length > 0) {
            const target = stack.join(" ");
            ret.push(target);
        }
        return ret;
    }

    console.log(splitMaxLengthWords(str, num));
})();

(function () {
    function add(n: number) {
        return function (m: number) {
            return n + m;
        };
    }
    console.log("add(1)(2):", add(1)(2));
})();
